package com.shujia.core

import org.apache.spark.storage.StorageLevel
import org.apache.spark.{SparkConf, SparkContext}

object Demo11Cache {
  def main(args: Array[String]): Unit = {

    //1、创建spark配置文件对象
    val conf = new SparkConf()
    // 运行方式
    conf.setMaster("local") //本地运行
    conf.setAppName("WordCount") //程序名

    //2、创建spark上下文对象
    val sc = new SparkContext(conf)

    //3、读取数据  hdfs路径或者本地路径
    //返回一个rdd  弹性分布式数据集
    val linesRDD = sc.textFile("data/word.txt")

    val wordRDD = linesRDD.flatMap(line => line.split(","))

    var kvRDD = wordRDD.map(word => (word, 1))

    //多多次使用的rdd进行缓存
    //kvRDD = kvRDD.cache() //默认键数据缓存到内存  相当于persist


    /**
      * 持久化级别现在
      * 1、MEMORY_ONLY
      * 2、MEMORY_ONLY_SER
      * 3、MEMORY_AND_DISK_SER
      *
      */

    kvRDD = kvRDD.persist(StorageLevel.MEMORY_AND_DISK_SER) //尽量将数据都压到内存
    kvRDD.foreach(println)

    val countRDD = kvRDD.reduceByKey(_ + _)

    countRDD.foreach(println)


    while (true) {

    }

  }

}
